'use strict';
/**
 * author：小小游 --- allen
 * date：2018.02.03
 * lastUpdateDate：2018.02.03
 * description：let / const的基本用法和区别
 */

/**
  * 1.var是属于函数级别作用域变量的声明，它是会提升到整个函数级别之上或全局的
  * 2.let是属于块级作用域变量的声明，只能在当前声明的块级作用域内或当前声明
  *   的子级的块级作用域访问
  */

/**
 * const使用：
 * 1.const一般用来引入库名，组件名等等
 * 2.const必须给初始值
 * 3.const指的并不是对象本身不可以修改，而指的是常量本身指的内存地址不可以修改，
 *   而var和let的物理指针是可以任意修改的，而const对应物理指针的对象是可以修改的，
 *   这个要理解好
 */
// const a = 12;
// a = 5;
// // Assignment to constant variable
// console.log(a);

// const a;
// a = 12;
// // Missing initializer in const declaration
// console.log(a);

const obj = {
    name: 'allen'
};

obj['name'] = 'xiaoyou';
obj['email'] = 'sk13710681303@vip.qq.com';

/**
 * 如果要彻底冻结属性都不可以更改，注意是在ES6的阳格模式下'use strict';
 * 会抛出异常，如下：
 * Cannot assign to read only property 'name' of object '#<Object>'
 */
Object.freeze(obj);
obj.name = 'aaa';

console.log(obj);
